// $Id: nodevanillapartitiondepth.h 72 2004-12-02 15:03:28Z jonas $
#ifndef NODEVANILLAPARTITIONDEPTH_H
#define NODEVANILLAPARTITIONDEPTH_H

#include "nodevanilla.h"
#include "nodepartitiondepth.h"

/**
 * Behaves like vanilla but tries to partition the network into groups of nodes
 * with similar properties. The nodes will try to satisfy their requests in
 * their own partition (group) and only if that fails ask for help in another.
 * This is mighty good if we want to place nodes with different speeds in
 * different groups thus taking the load of low bandwith nodes (which would
 * lower the speed for everyone).
 * This class is the glue. It takes NodeVanillas Freenet behaviour and attaches
 * the partition routing princible from the NodePartitionDepth.
 */
class NodeVanillaPartitionDepth : public NodeVanilla, public NodePartitionDepth {
public:
	NodeVanillaPartitionDepth(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, float, float, FileHandler *);

	void generateRequestOrderList(File *, std::list<KeyDistanceHelper> &);

	virtual bool requestFile(Node *node, NodeRequestFileParameters *params) { return NodeVanilla::routeFile(node, params); }
};

#endif
